تاریخ : شنبه 17 تير 1391
نویسنده : hamidrezakhouri

Select های تو در تو :

می توان در درون يک دستور Select ، دستور Select ديگری را تعريف کرد . در اين حالت ابتدا دستور Select درونی اجرا شده و نتايج مورد نظر خود را که سطرهايی از جدول مربوط به آن هستند را استخراج کرده و آنرا به Select بيرونی انتقال می دهد . سپس Select بيرونی نيز اجرا شده و نتايج استخراجی خود را با استفاده از فيلد مشترک بين 2 جدول با سطرهای Select درونی پيوند زده و سطرهای مطابق با شروط تعيين شدهخ را نمايش می دهد .
از حالت Select های تو در تو برای پيوند جدول ها استفاده می شود و برای زمانی مناسب است که بخواهيم ستون های خروجی در دستور Select فقط از يک جدول که در بيرونی ترين Select تعريف شده اند ، نمايش داده شوند .
نکته : به تعداد دستورات Select تو در تو ، سطح آن می گويند .


Select های 2 سطحی :

در اين حالت يک دستور Select در درون دستور Select ديگری تعريف می شود و برای پيوند 2 جدول با استفاده از فيلد مشترک استفاده می شود . نتايج خروجی فقط می تواند شامل سطرهای از جدول Select بيرونی باشد .
شکل کلی پيوند 2 جدول بااستفاده از Select 2 سطحی به صورت زير است :

Select  نام ستون های مورد نظر برای نمايش از جدول بيرونی
From  نام جدول 1
Where  نام فيلد مشترک 2 جدول  IN  ( Select  نام فيلد مشترک 2 جدول
                                                       From  نام جدول 2
                                                       Where شرط ها ... ) ;

مثال های قسمت های قبل پيوند جدول ها را با استفاده از Select های تو در تو بازنويسی می کنيم .
مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که در ترم 1 سال تحصيلی 85 - 86 ، درس با کد 1012 را انتخاب کرده اند :

مثال
Select  Name , Family
From  Students
Where Student ID  IN ( Select Student ID
                                      From   Selection
                                      Where   Course ID = 1012 AND Term = 1 AND Year = ' 85 - 86 ' ) ;
کد
Name Family
Ehsan Amiri
Ahmad Rezaee
خروجی

نکته : تفاوت اين حالت با مثال های قبلی در اين است که ستون های نمايش داده شده فقط از يک جدول ( جدول Select بيرونی ) نمايش داده می شوند .

مثال : نام دروسی را ارائه دهيد که دانشجو با شماره دانشجويي 10254861 انتخاب کرده است :

مثال
Select Coures ID , CoTitle
From Courses
Where Course ID IN ( Select Course ID
                                     From Selection
                                     Where Student ID = 10254861 ) ;
کد
Course ID Course Title
1011 پايگاه داده
1013 زبان تخصصی
خروجی


Select های 3 سطحی :

در اين حالت 3 دستور Select به صورت تو در تو تعريف شده اند و برای پيوند 3 جدول به صورت 2 به 2 و با استفاده از فيلد های مشترک استفاده می شود . نتايج خروجی فقط می تواند شامل ستون هايي از بيرونی ترين Select تعريف شده باشد . در اين حالت از جدول دوم برای پيوند جدول های 1 و 3 استفاده می شود .
شکل کلی پيوند 3 جدول با استفاده از Select های 3 سطحی به صورت زير است :

Select   نام ستون های مورد نظر جهت نمايش از جدول 1
From  نام جدول 1
where   نام فيلد مشترک جدول 1 و 2  IN ( Select  نام فيلد مشترک جدول 1 و2
                                                            From  نام جدول 2
                                                            Where  نام فيلد مشترک جدول 2 و 3  IN ( Select   نام فيلد مشترک جدول 2 و 3
                                                                                                                        From   نام جدول 3
                                                                                                                        Where  بقيه شرط ها ... )) ;

مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که حداقل يک درس از نوع نظری را انتخاب کرده باشد :

مثال
Select Name , Family
From Students
where Student ID IN ( Select Student ID
                                     From Selection
                                    Where Course ID  IN ( Select Course ID
                                                                        From Courses
                                                                        Where CoType = ' نظری ' )) ;
کد
Name Family
Zahra Hosini
Sahar Ahamadi
Hesam Razavi
خروجی

|
امتیاز مطلب : 3
|
تعداد امتیازدهندگان : 1
|
مجموع امتیاز : 1
موضوعات مرتبط: Select های تو در تو , ,

صفحه قبل 1 صفحه بعد

آخرین مطالب

/
از این که به وبلاگ من سر زدید خیلی خیلی ممنونم باتشکر حمیدرضاخوری